package dao

import (
	"context"
	"gf-websocket/internal/dao/internal"

	"github.com/gogf/gf/v2/database/gdb"
)

// internalArticleDao is internal type for wrapping internal DAO implements.
type internalArticleDao = *internal.ArticleDao

// articleDao is the data access object for table article.
// You can define custom methods on it to extend its functionality as you wish.
type articleDao struct {
	internalArticleDao
}

// Ensure the implementation satisfies the interface
// 删除这行会导致无法编译时检查接口实现完整性，但当前结构设计下保留会报错，因为 internal.ArticleDao 是一个指针类型别名而非接口
// var _ internal.ArticleDao = (*articleDao)(nil) // 注释掉此行以解决报错

var (
	Article = articleDao{
		internal.NewArticleDao(),
	}
)

// 自定义方法可以在这里添加
// 示例：
// func (dao *articleDao) GetArticlesByTag(tag string) ([]*model.Article, error) {
//     var articles []*model.Article
//     err := dao.Ctx(context.Background()).Where("tag", tag).Scan(&articles)
//     return articles, err
// }

// 为了确保所有方法都能访问，我们可以显式包装一些常用方法
// 确保 Ctx 方法正确实现
func (dao *articleDao) Ctx(ctx context.Context) *gdb.Model {
	return dao.internalArticleDao.Ctx(ctx)
}

// 修改 Where 方法以保持一致性
// 修改 Where 方法以保持一致性
func (dao *articleDao) Where(where any, args ...any) *gdb.Model {
	return dao.internalArticleDao.Ctx(context.Background()).Where(where, args...)
}

// 修改 Model 方法以保持一致性
func (dao *articleDao) Model() *gdb.Model {
	return dao.internalArticleDao.Ctx(context.Background())
}
